package com.xzmzhp.dao.people.SQL;

import com.xzmzhp.pojo.people.Personnel;
import com.xzmzhp.utils.StringUtils;
import org.apache.ibatis.jdbc.SQL;

/**
 * @author 王源(xm)
 * @Date: 2020/11/19 18:00
 * @Description:
 */
public class PersonnelSQL {
    /**
     * 根据权限id、部门id、年级其中的一个或多个查询人员数据的动态sql语句
     *
     * @param competenceId   权限名称
     * @param positionId     部门名称
     * @param personnelGrade 年级
     * @return 查询sql语句
     */
    public String findPersonnelId(int competenceId, int positionId, int personnelGrade, int personnelId) {
        return new SQL() {
            {
                //所查询的列名
                SELECT("competence_id,position_id,personnel_grade");
                //所要查询的表名
                FROM("personnel");
                //判断权限名称是否存在
                if (competenceId > 0) {
                    WHERE("competence_id = " + competenceId);
                }
                //判断部门名称是否存在
                if (positionId > 0) {
                    WHERE("position_id = " + positionId);
                }
                //判断年级是否正确
                if (personnelGrade > 0) {
                    WHERE("personnel_grade = " + personnelGrade);
                }
                //判断id是否正确
                if (personnelId > 0) {
                    WHERE("personnel_id != " + personnelId);
                }
            }
        }.toString();
    }

    /**
     * 根据人员名称、权限名称、部门名称、年级其中的一个或多个查询人员数据的动态sql语句
     *
     * @param personnelName  人员名称
     * @param competenceName 权限名称
     * @param positionName   部门名称
     * @param personnelGrade 年级
     * @return 查询sql语句
     */
    public String findPersonnel(String personnelName, String competenceName, String positionName, int personnelGrade) {
        return new SQL() {
            {
                //所查询的列名
                SELECT("*");
                //所要查询的表名
                FROM("personnel_view");
                //判断人员名称是否为空
                if (StringUtils.isNotEmpty(personnelName)) {
                    WHERE("personnel_name like '%" + personnelName + "%'");
                }
                //判断权限名称是否存在
                if (StringUtils.isNotEmpty(competenceName)) {
                    WHERE("competence_name = '" + competenceName + "'");
                }
                //判断部门名称是否存在
                if (StringUtils.isNotEmpty(positionName)) {
                    WHERE("position_name = '" + positionName + "'");
                }
                //判断年级是否正确
                if (StringUtils.isNotNull(personnelGrade)) {
                    WHERE("personnel_grade = " + personnelGrade);
                }
            }
        }.toString();
    }

    /**
     * 查询部门人数
     * @param positionId 部门id
     * @param grade 年级
     * @return 部门总人数
     */
    public String findPositionPeoples(Integer positionId,Integer grade){
        return new SQL() {
            {
                //所查询的列名
                SELECT("count(*)");
                //所要查询的表名
                FROM("personnel");
                WHERE("position_id = '" + positionId + "'");
                //判断人员年级是否为空
                if (StringUtils.isNotNull(grade)) {
                    WHERE("personnel_grade = '" + grade + "'");
                }
            }
        }.toString();
    }

    public String findByPersonnelId(Integer[] personnelId){
        return new SQL(){
            {
                //所查询的列名
                SELECT("*");
                //所要查询的表名
                FROM("personnel_view");
                WHERE("personnel_id in ("+StringUtils.convert(personnelId)+")");
            }
        }.toString();
    }

    /**
     * 人员信息修改sql语句
     *
     * @param personnel 实体类对象
     * @return sql语句
     */
    public String updatePersonnel(Personnel personnel) {
        return new SQL() {
            {
                //要修改的表名
                UPDATE("personnel");
                //判断personnel是否有值
                if (personnel != null) {
                    //判断学号是否有值
                    if (StringUtils.isNotEmpty(personnel.getStudentId())) {
                        //修改学号字段
                        SET("student_id = '" + personnel.getStudentId() + "'");
                    }
                    //判断姓名字段是否有值
                    if (StringUtils.isNotEmpty(personnel.getPersonnelName())) {
                        //修改姓名字段
                        SET("personnel_name = '" + personnel.getPersonnelName() + "'");
                    }
                    //判断权限id是否正确
                    if (StringUtils.isNotNull(personnel.getCompetenceId())) {
                        //修改权限id字段
                        SET("competence_id = " + personnel.getCompetenceId());
                    }
                    //判断手机号是否有值
                    if (StringUtils.isNotEmpty(personnel.getPersonnelPhone())) {
                        //修改手机号字段
                        SET("personnel_phone = '" + personnel.getPersonnelPhone() + "'");
                    }
                    //判断密码是否有值
                    if (StringUtils.isNotEmpty(personnel.getPersonnelPassword())) {
                        //修改密码字段
                        SET("personnel_password = '" + personnel.getPersonnelPassword() + "'");
                    }
                    //判断学院是否有值
                    if (StringUtils.isNotEmpty(personnel.getPersonnelAcademy())) {
                        //修改学院字段
                        SET("personnel_academy = '" + personnel.getPersonnelAcademy() + "'");
                    }
                    //判断班级是否有值
                    if (StringUtils.isNotEmpty(personnel.getPersonnelClasses())) {
                        //修改班级字段
                        SET("personnel_classes = '" + personnel.getPersonnelClasses() + "'");
                    }
                    //判断年级是否正确
                    if (StringUtils.isNotNull(personnel.getPersonnelGrade())) {
                        //修改年级字段
                        SET("personnel_grade = " + personnel.getPersonnelGrade());
                    }
                    //判断部门id是否正确
                    if (StringUtils.isNotNull(personnel.getPositionId())) {
                        //修改部门id字段
                        SET("position_id = " + personnel.getPositionId());
                    }
                    //判断人员id字段
                    if (StringUtils.isNotNull(personnel.getPersonnelId())) {
                        //人员id字段
                        WHERE("personnel_id = " + personnel.getPersonnelId());
                    } else {
                        WHERE("personnel_id = " + 0);
                    }
                }
            }
        }.toString();
    }
}
